package com.ctshk.rpc.hotel.service;

import com.ctshk.common.dto.Result;
import com.ctshk.common.model.PageResponse;
import com.ctshk.common.model.TokenUser;
import com.ctshk.rpc.hotel.dto.*;
import com.ctshk.rpc.hotel.req.*;

import java.time.LocalDateTime;
import java.util.List;

/**
 * <p>
 * 酒店订单表 服务类
 * </p>
 *
 * @author yinhuan
 * @since 2021-03-08
 */
public interface IHotelOrderService {


//    /**
//     * 添加酒店订单（API接口创建订单）
//     * @param hotelOrderReq
//     * @param userId
//     * @return
//     */
//    Result saveHotelOrder(HotelOrderReq hotelOrderReq, Long userId);
//
//
//    /**
//     * 根据Id查询酒店订单（API查询订单）
//     * @param hotelOrderId
//     * @return
//     */
//    Result<HotelOrderDTO> queryHotelOrderById(Long hotelOrderId);
//
//    /**
//     * 修改酒店订单（API修改订单）
//     * @param hotelOrderReq
//     * @return
//     */
//    Result editHotelOrder(HotelOrderReq hotelOrderReq, Long userId);

    /**
     * 填写订单信息下单
     * @param hotelPlaceOrderReq
     * @param user
     * @return
     */
    Result addHotelOrder(HotelPlaceOrderReq hotelPlaceOrderReq, TokenUser user);


    /**
     * 积分兑换港币
     *
     * @param integral 积分
     * @return 返回值
     */
    Result<HotelOrderIntegralExchangeDTO> conversionIntegral(Long integral);


    /**
     * 根据订单id查询订单信息
     *
     * @param orderId 订单id
     * @return 订单消息
     */
    Result<HotelOrderPayQueryInfoDTO> queryOrderInfo(Long orderId);


    /**
     * 预订中心下单
     *
     * @param reqList 预订中心订单入参
     * @return 返回值
     */
    Result payOrder(List<HotelPayOrderCollectionReq> reqList, Long userId);


    /**
     * 巴士线路列表
     * @param hotelOrderPageReq
     * @return
     */
    PageResponse<HotelOrderPageDTO> queyList(HotelOrderPageReq hotelOrderPageReq);


    /**
     * 根据订单id查询订单详细信息-无用的方法
     *
     * @param orderId 订单id
     * @return 订单消息
     */
    Result<HotelOrderDetailDTO> queryOrderDetailInfo(Long orderId);

    /**
     * 修改旅客信息
     */
    Result updateHotelOrderTourist(HotelOrderTouristReq touristReq, Long userId);

    /**
     * 取消订单
     * @param cancelOrderReq
     * @param userId
     */
    Result cancelOrder(HotelCancelOrderReq cancelOrderReq, Long userId);

    /**
     * 订单填写
     * @param hotelOrderSaveReq
     * @param currentUser
     */
    Result submit(HotelOrderSaveReq hotelOrderSaveReq, TokenUser currentUser);

    /**
     * 订单支付
     * @param hotelOrderCollectionReqList
     * @param currentUser
     */
    Result pay(Long id, List<HotelOrderCollectionReq> hotelOrderCollectionReqList, TokenUser currentUser);

    /**
     * 最近一次查询结束时间到当前时间的数据
     */
    Result<List<MyHotelOrderDTO>> recentToNow(LocalDateTime recent, LocalDateTime now);

    /**
     * 最近一次查询结束时间到当前时间的订单DTO
     */
    List<HotelOrderDTO> queryOrderDTOList(LocalDateTime start, LocalDateTime end);
}
